package day19;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Demo01 {
	public static void main(String[] args) {
		test02();
	}

	private static void test02() {
		// Properties对象在实际开发中, 通常都是与".properties"文件结合使用
		// 可以将文件中的内容加载到Properties对象中
		// ".properties"文件的内容书写要求: key=value
		// ".properties"文件中可以写注释, 以"#"开头
		// 向Properties对象加载文件时, 不会加载注释内容

		// 加载文件演示
		Properties p = new Properties();

		// 文件创建在src目录下, 会被编译到bin目录下去
		// bin目录下的资源, 可以通过类加载器访问
		// 为什么bin目录下的资源可以通过类加载器访问?
		// 因为eclipse工具在管理java项目时, bin目录就是编译目录
		// 类加载器加载类的时候, 是从该目录下加载, 所以bin目录也称为"类加载目录"
		// 或者说, 用eclipse工具管理的项目, 类加载目录是bin目录
		// 类加载目录下的内容可以被类加载器访问

		// 1. 获取类加载器
		ClassLoader loader = Demo01.class.getClassLoader();

		// 2. 通过类加载器对象, 以流的形式获取资源
		// Properties的load()方法需要提供一个InputStream
		// 而类加载器有一个方法, 可以实现以InputStream的方式获取资源
		// 类加载器的getResourceAsStream()方法默认从类加载目录获取资源
		InputStream is = loader.getResourceAsStream("some.properties");
		try {
			// 3. 让Properties对象从流中加载数据
			p.load(is);
			System.out.println(p);
			System.out.println(p.getProperty("name"));
			System.out.println(p.getProperty("phone"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// 关于".properties"文件编码
		// ".properties"文件的默认字符集是ISO-8859-1
		// 在里面直接输入汉字, 会以unicode码的形式表现
		// 好处: 向程序中加载时, 由于程序使用的是utf-8编码
		// 直接解析unicode码可以避免乱码
	}

	private static void test01() {
		Properties pro = new Properties();

		pro.put(1, "aaa");
		pro.put("2", "bbb");
		pro.put('3', 123.345);
		pro.put("4", 123);

		//		System.out.println(pro);
		//		Object val1 = pro.get(1);
		//		System.out.println(val1);

		//		String v = pro.getProperty("2");
		//		System.out.println(v);

		String v = pro.getProperty("4");
		System.out.println(v);

		pro.setProperty("5", "afdsaf");
		System.out.println(pro.getProperty("5"));

	}
}
